import axios from 'axios'
import { ElMessage } from 'element-plus'
import { API_CONFIG } from '@/config/api.config'

// 创建 axios 实例
const service = axios.create({
  baseURL: API_CONFIG.BASE_URL,
  timeout: API_CONFIG.TIMEOUT,
  headers: {
    'Content-Type': 'application/json;charset=UTF-8',
    'Accept': 'application/json'
  }
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 从 localStorage 获取 token
    const token = localStorage.getItem('token')
    console.log(config.url);
    
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`
    }
    
    // 如果是POST请求，确保数据格式正确
    if (config.method.toLowerCase() === 'post' && config.data) {
      config.data = JSON.stringify(config.data)
    }
    
    return config
  },
  error => {
    console.error('请求错误：', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    // 这里假设后端返回的数据结构为 { code: number, message: string, data: any }
    if (res.code !== 1000) {
      ElMessage({
        message: res.message || '发生错误',
        type: 'error',
        duration: 5 * 1000
      })

      // 处理特定错误码
      if (res.code === 401) {
        // token 过期或未登录
        localStorage.removeItem('token')
        window.location.href = '/login'
      }
      return Promise.reject(new Error(res.message || '发生错误'))
    }
    
    return res.data
  },
  error => {
    console.error('响应错误：', error)
    ElMessage({
      message: error.message || '网络错误',
      type: 'error',
      duration: 5 * 1000
    })
    return Promise.reject(error)
  }
)

export default service
